package Z008NumberAndString.NS06String;

public class StringTest {}

class NewString{
    public static void main(String[] args) {
        String graen = "盖伦";
        // 字面值,虚拟机碰到字面值就会创建一个字符串对象
        String teemo = new String("提莫");
        // 创建了两个字符串对象
        char[] cs = new char[]{'崔','斯','特'};


        String hero = new String(cs);
        // 通过字符数组创建一个字符串对象
        String hero3 = graen + teemo;
        // 通过+加号进行字符串拼接
    }
}

//  class FinalString{
//      public static void main(String[] args) {
//          MyString str = new MyString();
//      }
//      static class MyString extends String{
//           String 被 final 修饰 无法被继承
//      }
//  }


/*
immutable 是指不可改变的
比如创建了一个字符串对象
String garen ="盖伦";
不可改变的具体含义是指：
不能增加长度
不能减少长度
不能插入字符
不能删除字符
不能修改字符
一旦创建好这个字符串，里面的内容 永远 不能改变

String 的表现就像是一个常量
 */

//  class ImmutadleString{
//      public static void main(String[] args) {
//          immutadle String str = new ImmutadleString();
//          str = "TestString";
//      }
//  }

class TestString{
    public static void main(String[] args) {
        String name = "盖伦";

        System.out.println(name.length());

        String unknowHero = "";

        // 可以有长度为0的字符串，即空字符串
        System.out.println(unknowHero.length());
    }
}

/*
创建一个长度是5的随机字符串，随机字符有可能是数字，大写字母或者小写字母
给点提示: 数字和字符之间可以通过互相转换
char c = 'A';
short s = (short) c;
通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了
 */

/*
创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个数组
对这个数组进行排序，按照每个字符串的首字母排序(无视大小写)

注1： 不能使用Arrays.sort() 要自己写
注2： 无视大小写，即 Axxxx 和 axxxxx 没有先后顺序
 */

/*
1. 生成一个长度是3的随机字符串，把这个字符串作为当做密码
2. 使用穷举法生成长度是3个字符串，匹配上述生成的密码
要求： 分别使用多层for循环 和 递归解决上述问题
 */